/*
 * Trigrama.cpp
 *
 *  Created on: 27/11/2014
 *      Author: nico
 */

#include "Trigrama.hpp"

Trigrama::Trigrama(){

}

Trigrama::Trigrama(string clave) {
	this->clave = clave;

}

Trigrama::Trigrama(const Trigrama& trigrama){
	this->clave = trigrama.clave;
}

Trigrama::~Trigrama() {
	map <string,Unigrama*>::iterator iterador;
	for (iterador = this->terminos.begin() ; iterador != this->terminos.end(); iterador++){
		delete (*iterador).second;
	}
}

string Trigrama::getClave(){
	return this->clave;
}

bool Trigrama::existeTermino(string termino){
	if ( this->terminos.find(termino) == this->terminos.end()  ){
		return false;
	}
	return true;
}

void Trigrama::agregarTermino(string termino){
	Unigrama* pUnigrama = new Unigrama (termino);
	this->terminos.insert(pair <string,Unigrama*> (termino,pUnigrama));
}

void Trigrama::agregarTermino(Unigrama* unigrama){
	Unigrama* p = new Unigrama (*unigrama);
	this->terminos.insert( pair <string, Unigrama*> (p->getTermino(), p));
}


void Trigrama::incOcurrencias(string* termino){
	this->terminos[*termino]->inc();
}

Ocurrencias Trigrama::getOcurrencias(string termino){
	return this->terminos[termino]->getOcurrencias();
}

void Trigrama::sumarOcurrencias(string termino, Ocurrencias ocurrencias){
	this->terminos[termino]->sumarOcurrencias(ocurrencias);
}

Ocurrencias Trigrama:: getSumatoriaTrigramas (){
	map<string,Unigrama*>::iterator it;
		Ocurrencias total = 0;
		for (it = this->terminos.begin(); it != this->terminos.end(); it++){
			total = total + it->second->getOcurrencias();
		}
		return total;
}

int Trigrama::getCantTerminosDistintos(){
	return this->terminos.size();
}

Probabilidad Trigrama::getProbabilidad (string* termino){
	return this->terminos[*termino]->getProbabilidad();
}

map <string,Unigrama*>:: iterator Trigrama::getIteradorTerminos(){
	return this->terminos.begin();
}

map <string,Unigrama*>:: iterator Trigrama::ultimoTermino(){
	return this->terminos.end();
}
bool operator< (const Trigrama& u1, const Trigrama& u2){
	return (u1.clave.compare(u2.clave));
}



